package paket;

import java.io.File;
import java.util.ArrayList;
import javax.swing.ImageIcon;

/**
 *
 * @author F. Oğuz
 */
public class Lance extends Hero {

    public Lance(int aaa) {
        this.setDefaultHealth(30);
        this.setStrokePower(3);
        this.setTeam(aaa);
        this.setName("Lance");
        if (aaa == 1) {
            this.setTeamRenk("kirmizi");

            for (int i = 1; i < 19; i++) {

                this.setFile(new File("images/heroes/halberdier-idle-" + i + ".png"));
                this.getaImage()[i - 1] = new ImageIcon(this.getFile().getAbsolutePath()).getImage();
            }


            this.setGifRight("images/heroes/halberdier-idle-1.png");
            this.setGifLeft("images/heroes/halberdier-idle-1.png");
        } else {
            this.setTeamRenk("blue");

            for (int i = 1; i < 19; i++) {
                this.setFile(new File("images/enemy/impaler.png"));
                this.getaImage()[i - 1] = new ImageIcon(this.getFile().getAbsolutePath()).getImage();
            }
            this.setFile(new File("images/enemy/impaler-death-9.png"));
            this.getaImage()[19] = new ImageIcon(this.getFile().getAbsolutePath()).getImage();


            this.setGifRight("images/enemy/impaler.png");
            this.setGifLeft("images/enemy/impaler.png");
            //   this.setGif(new Image new File("images/heroes/halberdier-moving.png")  ) ;
        }
    }

    public int vurus(Hero vurulan) {
        if (vurulan.getName().equals("Knight")) {
            return 8;
        } else {
            return 3;  // diğerleri için...
        }
    }

    @Override
    public void stop() {
        // Dur metodunun içeriği
    }

    @Override
    public ArrayList hamleleriDondur(paket.Hero[][] heroeses, int i, int j) {
        // İlerle metodunun içeriği

        Hero[][] heroes = new Hero[BoardPanel.ROWS][BoardPanel.COLS];
        
        Kopyalama kp = new Kopyalama();
        kp.multiArrayCopy(heroeses, heroes);

        ArrayList liste = new ArrayList();
        liste.add(paket.Hero.makeGamePad(heroes));
        System.out.println("liste : " + liste);
        // i'ler için
        if (i - 1 >= 0) {
            if (heroes[i - 1][j] == null) {

                heroes[i - 1][j] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));
                //yukarı
               // System.out.println("liste : " + liste);

                kp.multiArrayCopy(heroeses, heroes);
            }
        }

        if (j - 1 >= 0 && i - 1 >= 0) {
            if (heroes[i - 1][j - 1] == null) {

                heroes[i - 1][j - 1] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));//System.out.println("liste : " + liste);

                kp.multiArrayCopy(heroeses, heroes);
            }
        }

        if (i + 1 <= paket.BoardPanel.ROWS - 1) {
            if (heroes[i + 1][j] == null) {

                heroes[i + 1][j] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));//aşağı
                //System.out.println("liste : " + liste);

                kp.multiArrayCopy(heroeses, heroes);
            }

        }
        if (j - 1 >= 0 && i + 1 <= paket.BoardPanel.ROWS - 1) {
            if (heroes[i + 1][j - 1] == null) {

                heroes[i + 1][j - 1] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));//sol aşağı çapraz için
                //System.out.println("liste : " + liste);

                kp.multiArrayCopy(heroeses, heroes);
            }
        }
        //j'ler için
        if (j - 1 >= 0) {
            if (heroes[i][j - 1] == null) {

                heroes[i][j - 1] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  //geri
                //System.out.println("liste : " + liste);

                kp.multiArrayCopy(heroeses, heroes);
            }
        }
        if (j + 1 <= paket.BoardPanel.COLS - 1) {
            if (heroes[i][j + 1] == null) {
                //System.out.println("Hero kontrol durumu: " + heroes[i][j]);
                heroes[i][j + 1] = heroes[i][j];
                heroes[i][j] = null;
                //System.out.println("Hero kontrol durumu: " + heroes[i][j]);
                liste.add(paket.Hero.makeGamePad(heroes)); // ileri
                //System.out.println("liste : " + liste);

                kp.multiArrayCopy(heroeses, heroes);
            }
        }
        if (i + 1 <= BoardPanel.ROWS - 1 && j + 1 <= BoardPanel.COLS - 1) {
            if (heroes[i + 1][j + 1] == null) {

                heroes[i + 1][j + 1] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  // sağ aşağı çapraz
                //System.out.println("liste : " + liste);

                kp.multiArrayCopy(heroeses, heroes);
            }
        }

        if (i - 1 >= 0 && j + 1 <= BoardPanel.COLS - 1) {
            if (heroes[i - 1][j + 1] == null) {

                heroes[i - 1][j + 1] = heroes[i][j];
                heroes[i][j] = null;
                liste.add(paket.Hero.makeGamePad(heroes));  // sağ yıkarı çapraz
                //System.out.println("liste : " + liste);

                kp.multiArrayCopy(heroeses, heroes);
            }
        }

        System.out.println("listeyi verdim");
        System.out.println("mızrak");

        return liste;
    }

    @Override
    public int fight(Hero[][] heroes, int i, int j) {
        int hasar = 0;
        System.out.println("Lance savastayız");

        if (i - 1 >= 0) {    // üsttekine vurus          // aşağıdaki renkler sayesinde aynı takımda olup olmadığı bakılır.
            if (heroes[i - 1][j] != null) {
                if (!heroes[i - 1][j].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {

                    hasar = hasar + vurus(heroes[i - 1][j]);
                    heroes[i - 1][j].setHealth(heroes[i - 1][j].getHealth() - vurus(heroes[i - 1][j]));
                }
            }
        }
        if (i - 1 >= 0 & j - 1 >= 0) {  // sol üst çapraza vurus
            if (heroes[i - 1][j - 1] != null) {
                if (!heroes[i - 1][j - 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i - 1][j - 1]);
                    heroes[i - 1][j - 1].setHealth(heroes[i - 1][j - 1].getHealth() - vurus(heroes[i - 1][j - 1]));
                }
            }
        }
        if (j - 1 >= 0) {  // soldakine vurus
            if (heroes[i][j - 1] != null) {
                if (!heroes[i][j - 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i][j - 1]);
                    heroes[i][j - 1].setHealth(heroes[i][j - 1].getHealth() - vurus(heroes[i][j - 1]));
                }
            }
        }


        if (j - 1 >= 0 & i + 1 <= BoardPanel.ROWS - 1) {    // sol alt çapraza vurus
            if (heroes[i + 1][j - 1] != null) {
                if (!heroes[i + 1][j - 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i + 1][j - 1]);
                    heroes[i + 1][j - 1].setHealth(heroes[i + 1][j - 1].getHealth() - vurus(heroes[i + 1][j - 1]));
                }
            }
        }
        if (i + 1 <= BoardPanel.ROWS - 1) {  // aşağıya vurus
            if (heroes[i + 1][j] != null) {
                if (!heroes[i + 1][j].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i + 1][j]);
                    heroes[i + 1][j].setHealth(heroes[i + 1][j].getHealth() - vurus(heroes[i + 1][j]));
                }
            }
        }
        if (j + 1 <= BoardPanel.COLS - 1) {  // sağ tarafına vurus
            if (heroes[i][j + 1] != null) {
                if (!heroes[i][j + 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i][j + 1]);
                    heroes[i][j + 1].setHealth(heroes[i][j + 1].getHealth() - vurus(heroes[i][j + 1]));
                }
            }
        }
        if (i - 1 >= 0 && j + 1 <= BoardPanel.COLS - 1) {   // sağ üst çapraza vuruş
            if (heroes[i - 1][j + 1] != null) {
                if (!heroes[i - 1][j + 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i - 1][j + 1]);
                    heroes[i - 1][j + 1].setHealth(heroes[i - 1][j + 1].getHealth() - vurus(heroes[i - 1][j + 1]));
                }
            }
        }
        if (i + 1 <= BoardPanel.ROWS - 1 && j + 1 <= BoardPanel.COLS - 1) {  // sağ alt çapraza vuruş
            if (heroes[i + 1][j + 1] != null) {
                if (!heroes[i + 1][j + 1].getTeamRenk().equals(heroes[i][j].getTeamRenk())) {
                    hasar = hasar + vurus(heroes[i + 1][j + 1]);
                    heroes[i + 1][j + 1].setHealth(heroes[i + 1][j + 1].getHealth() - vurus(heroes[i + 1][j + 1]));
                }
            }
        }

        return hasar;
    }

    @Override
    public void runAndFight() {
        // İlerle ve Savaş metodunun içeriği
    }
}
